GO

Exp Ring (Anel De Experiencia)

Por gonorreiaswat, 18 de jul. de 2011 em Tutoriais de Scripting

otserv
tibia
script
5.0 (1)
54
20.8k
gonorreiaswatG
18 de julho de 2011 às 14:00

Tópico atualizado.

Como o nome diz, é um anél que aumenta a experiência de sua caçada' (configurável)
\o/
Vamos lá...

1º Passo

Abra o arquivo "Items.xml" (pasta Data / Items)
Com o editor de sua preferência, use o comando de busca (geralmente "Ctrl + F") e digite a ID "7697".
Vai achar o item "signet ring" que estará assim: (na maioria dos OTServ's)


<item id="7697" article="a" name="signet ring">
		<attribute key="weight" value="80" />
		<attribute key="slotType" value="ring" />
	</item>

Substitua isso por:


<item id="7697" article="a" name="experience ring">
		<attribute key="weight" value="500" />
		<attribute key="description" value="Este anel lhe da 2x mais experiencia (ativo)." />
		<attribute key="slotType" value="ring" />
		<attribute key="duration" value="4320" />
		<attribute key="decayTo" value="0" />
		<attribute key="showduration" value="1" />
		<attribute key="transformDeEquipTo" value="7708" />
</item>

Logo em seguida, procure pela ID "7708".
Encontrará o item "ring" que estará assim: (na maioria dos OTServ's)

<item id="7708" article="a" name="ring">
		<attribute key="weight" value="40" />
		<attribute key="slotType" value="ring" />
</item>

Substitua isso por:


<item id="7708" article="a" name="ring experience">
		<attribute key="weight" value="500" />
		<attribute key="slotType" value="ring" />
		<attribute key="stopduration" value="1" />
		<attribute key="showduration" value="1" />
		<attribute key="transformEquipTo" value="7697" />
</item>

Pronto, em Items.xml não mexeremos mais.



2º Passo


Abra o arquivo "Movements.xml" (pasta Data / Movements)
Adicione as tags abaixo:


<movevent type="Equip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/>
<movevent type="DeEquip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/>
<movevent type="Equip" itemid="7708" slot="ring" event="script" value="exp_ring.lua"/>
<movevent type="DeEquip" itemid="7708" slot="ring" event="script" value="exp_ring.lua"/>

Pronto, em "movements.xml" é só.



3º Passo
Aqui, temos duas opções...
O Exp Ring Tradicional é para server com Experiência fixa, ou seja, a EXP é sempre a mesma..
Já o Exp Ring por Stages é para server que a Experiência varia de acordo com o level do player.
Clique no Spoiler referente ao seu server.

EXP RING Tradicional:

Abra a pasta (Data / Movements / Scripts) e crie um arquivo com o nome "exp_ring.lua" (pode copiar um arquivo existente e renomeá-lo).
Após fazer isto, abra este arquivo (exp_ring.lua) e cole o código abaixo dentro.
Obs: se tiver algo escrito do arquivo, apague-o e deixe somente o código abaixo.


function onEquip(cid, item, slot)
doTransformItem(item.uid, 7697, 1)
doPlayerSendTextMessage(cid, 22, 'Agora ganha 2x mais experiencia!')
doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*0.2)



return TRUE
end

function onDeEquip(cid, item, slot)
doTransformItem(item.uid, 7708, 1)
doPlayerSendTextMessage(cid, 22, 'Experiencia extra cancelada.')
doPlayerSetExperienceRate(cid, 1)


return TRUE
end

 



EXP RING por Stages:

Abra a pasta (Data / Movements / Scripts) e crie um arquivo com o nome "exp_ring.lua" (pode copiar um arquivo existente e renomeá-lo).
Após fazer isto, abra este arquivo (exp_ring.lua) e cole o código abaixo dentro.
Obs: se tiver algo escrito do arquivo, apague-o e deixe somente o código abaixo.

function onEquip(cid, item, slot)

local rate = {}

if getPlayerLevel(cid) <= 200 then
rate = 1.3
elseif getPlayerLevel(cid) > 200 and getPlayerLevel(cid) <= 280 then
rate = 1.15
elseif getPlayerLevel(cid) > 280 then
rate = 1.05
end

doTransformItem(item.uid, 7697, 1)
doPlayerSendTextMessage(cid, 22, "Sua experiencia foi aumentada em "..((rate - 1)*100).." %.")
doPlayerSetExperienceRate(cid, rate)
return TRUE
end

function onDeEquip(cid, item, slot)
doTransformItem(item.uid, 7708, 1)
doPlayerSendTextMessage(cid, 22, "Sua experiencia esta de volta ao normal.")
doPlayerSetExperienceRate(cid, 1.0)
return TRUE
end

Salve-o e feche o arquivo.



Para aprender configurar a rate do Script clique no spoiler abaixo:

Eu não testei, mas creio que onde está:


doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*2)

Azul: É o valor em vezes que aumentará a experiência. Ex:
Onde está o "2" no código, você pode substituir por quantas vezes que que seja a multiplicação da EXP' (2 é igual a 2x mais Exp)...
Ou pode por em porcentagens usando como está abaixo:
1.5 = 50%
1.2 = 20%

E assim sucessivamente.

 




Sei que vão pedir, então segue abaixo "Experience Ring Recarregável"

Se quer um Anel de Experiencia Recarregável (como soft boots), clique no Spoiler abaixo.


1º Passo

Abra o arquivo "Items.xml" (pasta Data / Items)
Com o editor de sua preferência, use o comando de busca (geralmente "Ctrl + F") e digite a ID "7697".
Vai achar o item "signet ring" que estará assim: (na maioria dos OTServ's)


<item id="7697" article="a" name="signet ring">
		<attribute key="weight" value="80" />
		<attribute key="slotType" value="ring" />
</item>

Substitua isso por:


<item id="7697" article="a" name="experience ring">
		<attribute key="weight" value="500" />
		<attribute key="description" value="Este anel lhe da 2x mais experiencia (ativo)." />
		<attribute key="slotType" value="ring" />
		<attribute key="duration" value="4320" />
		<attribute key="decayTo" value="2122" />
		<attribute key="showduration" value="1" />
		<attribute key="transformDeEquipTo" value="7708" />
</item>

OBS: Eu usei o Item "Elven Brooch" (ID 2122) pois estava sem tempo para procurar um item para por no lugar, ou seja, quando acabar o anél ele transformará no "Elven Brooch".


Agora procure pela ID "7708".
Encontrará o item "ring" que estará assim: (na maioria dos OTServ's)


<item id="7708" article="a" name="ring">
		<attribute key="weight" value="40" />
		<attribute key="slotType" value="ring" />
</item>

Substitua isso por:


<item id="7708" article="a" name="ring experience">
		<attribute key="weight" value="500" />
		<attribute key="slotType" value="ring" />
		<attribute key="stopduration" value="1" />
		<attribute key="showduration" value="1" />
		<attribute key="transformEquipTo" value="7697" />
</item>

Procure também pela ID "2122".
Achará o item "Elven Brooch".
Provavelmente achará o item abaixo:

<item id="2122" article="an" name="elven brooch">
		<attribute key="weight" value="100" />
</item>

Substitua isso por:


<item id="2122" article="a" name="broken experience ring">
		<attribute key="weight" value="100" />
		<attribute key="slotType" value="ring" />
</item>

Pronto, em Items.xml não mexeremos mais.



2º Passo

Abra o arquivo "Movements.xml" (pasta Data / Movements)
Adicione as tags abaixo:


<movevent type="Equip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/>
<movevent type="DeEquip" itemid="7697" slot="ring" event="script" value="exp_ring.lua"/>
<movevent type="Equip" itemid="7708" slot="ring" event="script" value="exp_ring.lua"/>
<movevent type="DeEquip" itemid="7708" slot="ring" event="script" value="exp_ring.lua/">

Pronto, em "movements.xml" é só.



3º Passo

Abra a pasta (Data / Movements / Scripts) e crie um arquivo com o nome "exp_ring.lua" (pode copiar um arquivo existente e renomeá-lo).
Após fazer isto, abra este arquivo (exp_ring.lua) e cole o código abaixo dentro.
Obs: se tiver algo escrito do arquivo, apague-o e deixe somente o código abaixo.


function onEquip(cid, item, slot)
doTransformItem(item.uid, 7697, 1)
doPlayerSendTextMessage(cid, 22, 'Agora ganha 2x mais experiencia!')
doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*0.2)



return TRUE
end

function onDeEquip(cid, item, slot)
doTransformItem(item.uid, 7708, 1)
doPlayerSendTextMessage(cid, 22, 'Experiencia extra cancelada.')
doPlayerSetExperienceRate(cid, 1)


return TRUE
end

 



4º Passo

Abra a pasta (Data / NPC ) e crie um arquivo com o nome "Joalheiro.xml" (pode copiar um arquivo existente e renomeá-lo).
Após fazer isto, abra este arquivo (Joalheiro.xml) e cole o código abaixo dentro.
Obs: se tiver algo escrito do arquivo, apague-o e deixe somente o código abaixo.

<!--?xml version="1.0" encoding="UTF-8"?-->
<npc name="Joalheiro" script="data/npc/scripts/Sell/ring_repair.lua" walkinterval="2000" floorchange="0">
	<health now="100" max="100">
	<look type="128" head="40" body="37" legs="116" feet="95" addons="0">
	<parameters>
		<parameter key="message_greet" value="Just great, another ... 'customer'. Hello, |PLAYERNAME|. If you want to trade, let's get it over with.">
		<parameter key="message_farewell" value="That's music in my ears.">
		<parameter key="message_walkaway" value="Yeah, get lost.">
		<parameter key="message_onsendtrade" value="Yeah, buy something.">
		<parameter key="module_shop" value="1">
</parameters>
</npc>

Salve e feche.

Agora vá na pasta ( Data / NPC / Scripts / Sell ) e crie um arquivo com o nome "ring_repair.lua" (pode copiar um arquivo existente e renomeá-lo).
Após fazer isto, abra este arquivo (ring_repair.lua) e cole o código abaixo dentro.
Obs: se tiver algo escrito do arquivo, apague-o e deixe somente o código abaixo.


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid)			end
function onCreatureDisappear(cid)			npcHandler:onCreatureDisappear(cid)			end
function onCreatureSay(cid, type, msg)			npcHandler:onCreatureSay(cid, type, msg)		end
function onThink()					npcHandler:onThink()					end

function creatureSayCallback(cid, type, msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end

	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

	if(msgcontains(msg, 'ring') or msgcontains(msg, 'experience')) then
		selfSay('Do you want to repair your experience ring for 50000 gold coins?', cid)
		talkState[talkUser] = 1
	elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if(getPlayerItemCount(cid, 2122) >= 1) then
			if(doPlayerRemoveMoney(cid, 50000) == TRUE) then
				doPlayerRemoveItem(cid, 2122, 1)
				doPlayerAddItem(cid, 7697)
				selfSay('Here you are.', cid)
			else
				selfSay('Sorry, you don\'t have enough gold.', cid)
			end
		else
			selfSay('Sorry, you don\'t have the item.', cid)
		end
		talkState[talkUser] = 0
	elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
		talkState[talkUser] = 0
		selfSay('Ok then.', cid)

	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Salve e feche.


Configurações do NPC:
Recolhe: "broken experience ring"
Custo: "50k"
Devolte: "Brand-New Experience Ring"

5º Passo

Agora vá no Map Editor e adicione seu novo NPC em seu Mapa.





É, acho que é isso...
Qualquer coisa postem aqui para resolvermos juntos.

Eu editei o Script, criei o NPC e criei o Tutorial.
Créditos pelo tutorial: AdrianoSwaTT
Créditos pelo Exp Ring Stages: Vodkart
Créditos pelo Script: OTLand

Abraços, espero que seja útil'

Editado Setembro 8 por Adriano Swatt

fsgF
18 de julho de 2011 às 14:25

Isto tinha no PBOT, era bem legal, almentava 10% da EXP.

Parabéns cara.

LukaszGL
18 de julho de 2011 às 14:28

Muito Bom VLW ja botei no meu ot 100% pegando TY

REP+

gonorreiaswatG
18 de julho de 2011 às 14:31

Isto tinha no PBOT, era bem legal, almentava 10% da EXP.

Parabéns cara.

 

De tanto que vejo comentário sobre esse "PBOT" eu nem manjo o que é... acredito ser um OTServ, mas nunca joguei ele.

:D

 

@@@ Sobre o comentário

 

Muito obrigado cara, é gratificante saber que estão gostando do meu trabalho post.

 

 

Abraços :smile_positivo:

 

Muito Bom VLW ja botei no meu ot 100% pegando TY

REP+

 

Opaah, faça bom aproveito e valeu por comentar!

 

 

Abraços :thumbsupsmiley2:

SkyDangerousS
18 de julho de 2011 às 19:25

Parabéns

ótimo Tutorial bem explicado e detalhado.

 

Obrigado por contribuir ao Xtibia

gonorreiaswatG
18 de julho de 2011 às 22:26

Parabéns

ótimo Tutorial bem explicado e detalhado.

 

Obrigado por contribuir ao Xtibia

 

 

Obrigado pelo elogio...

Procuro sempre deixar meus tutoriais o mais explicado e detalhado possível para ajudar / facilitar para os que estão iniciando.

 

 

@@@ EDITED - FOR ALLS

 

Triste é você ver o tanto de gente que passou pelo tópico, e talves até usou o Script, e nem deixa um comentário.

 

Isso que é o pior...mas fazer o que né?!

 

 

 

Abraços a todos aí! :smile_positivo:

Editado Julho 18 por Gonorreia

19 de julho de 2011 às 11:11

Nossa, muito bom. Isso sim vale a pena ser vendido em reais os ots ^^]

 

Obrigado por postar aqui :D

Editado Julho 19 por Pess0a

gonorreiaswatG
19 de julho de 2011 às 11:41

Nossa, muito bom. Isso sim vale a pena ser vendido em reais os ots ^^]

 

Obrigado por postar aqui :D

 

Valeu ae por comentar...

 

Obrigado também pelo elogio.

 

Abraços :smile_positivo:

Editado Julho 19 por Gonorreia

leo8717L
19 de julho de 2011 às 22:07

Quando eu acabar de criar meu ot irei colokar esse anel

Funcionando ou não obrigado por compartilhar isso com todos

 

 

zwmfkh.gif

NolisN
19 de julho de 2011 às 22:55

Ótimo Tutorial, já estou colocando no meu servidor, concerteza vai me servir muito, esse tipo de item é bom para ser usado em servidores sérios, com itens para comprar em sites, etc. porém quem joga free e não quer pagar vai ficar meio triste. ;/

 

Continue trazendo mais tutoriais ao xTibia.

Aprovado PAAAAFBbkCaoWgrMmJJ2g1Ez4phiy4q-iHbZoA_s5PzZR6nDqrAgEbsrgpFwJ00AEeblwWdqeLfweTg6p4-aFoJcxuAAm1T1UIRqv8Rt0SEwupqxsngSAJmmdHC7.jpg

PAAAAPNuAFsCiAlOZDlZiArJ4ingQU0erHYu3SGZ_WAEMOHPFpPpZNnr7yu0b1g2s0IWi1QRoIUWd2PKfp2B79aRz_sAm1T1UJkulc7MnfAfLkSo5fA8g7kSEnMS.jpg

 

REP+ add.png

 

Até Logo

ConectadoC
19 de julho de 2011 às 23:35

Muito bom tutorial gostei muito do artigo e da organização .

Continue trazendo bons tutorias para o Xtibia

Obrigado por trazer ao Xtibia .

Aprovado button_ok.png

 

 

Att , Conectado .

sauvadur2S
19 de julho de 2011 às 23:51

Muito loco já esta tudo pronto para colocar so falta dar reload.

Mas antes de reiniciar o servidor poderia me responder se algum dos 2 rings dropam de monstros? Pois queria que fosse um anel de eventos!

YstiflerY
20 de julho de 2011 às 00:18

Muito bom gostei ;p

estava precisando mesmo ;D

 

 

Aprovadoo :button_ok:

 

 

att: R.suxX

gonorreiaswatG
20 de julho de 2011 às 04:09

Muito loco já esta tudo pronto para colocar so falta dar reload.

Mas antes de reiniciar o servidor poderia me responder se algum dos 2 rings dropam de monstros? Pois queria que fosse um anel de eventos!

 

@@@ XxSauvadurxX

Certamente que não dropa de bichos e nem é vendido em NPC's.

Abraços :smile_positivo:

 

 

@@@ Ystifler

Obrigado por comentar. :smile_positivo:

 

 

@@@ Conectado

Obrigado por comentar... e sim, vou continuar trazendo conteúdo para o Xtibia sim, sempre que possível. :smile_positivo:

 

 

@@@ Danielziak

Valeu pelo comentário, faça bom aproveito do Script.

Valeu pelo REP+ também! :smile_positivo:

 

 

@@@ Kratooos

Valeu por comentar aí...

Como tive comentários acima, além de que testei, está funcionando sim, espero que funcione pra você também..

Valeu pelo REP+ ! :smile_positivo:

 

Lembre-se, qualquer coisa poste aqui para solucionarmos seu problema..

 

Abraços :smile_positivo:

 

 

@@@ ALL FORUM

 

Façam bom aproveito do Script aí galera!

 

 

Abraços a todos :smile_positivo:

Editado Julho 20 por Gonorreia

sensS
20 de julho de 2011 às 07:50

1º kra parabens ja tinha 1 tempo que eu keria esse ring

2º muito bem divido!

3º PbOT (Private Brasil Open Tibia) foi um ot sever que fez muito sucesso porem acabou se perdendo apos a separação da equipe e as denuncias player com equipes editados, o PbOT tinha magias inovadoras vocaçoes balanseadas e itens diferentes ( o famoso Xp Ring quera comprado em forma de doaçao) hj existem alguns ots com mapa PbOT (ja que o mesmo tinha um mapa proprio) porem o mais forte era o NewPbOT(agora ja nao mais tao por causa da instabilidade do site e do servidor) bom e isso que eu sei mesmo pq joguei tanto o pbot quando o new =).

Abrass. adorei o ring ^-0